﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAO;
using Entidades;

namespace Negocio
{
    public class PartidoRules
    {
        public void GuardarPartido(PartidoEntity partido)
        {
            if (partido != null)
            {
                var dao = new PartidoDAO();
                if (partido.Id > 0)
                    dao.Update(partido);
                else
                    partido.Id = dao.Insert(partido);
            }
        }

        public List<PartidoEntity> SeleccionarPartidoPorFiltro(string sede, DateTime? fechaDesde, DateTime? fechaHasta, int? idLocal, int? idVisitante, int? idEtapa, bool? sinEtapa)
        {

            var dao = new PartidoDAO();
            var lista = dao.SelectAll();
            var listaFiltrada = (from p in lista
                                 where ((string.IsNullOrEmpty(sede) || p.Sede == sede) &&
                                        (!fechaDesde.HasValue || p.Fecha >= fechaDesde.Value) &&
                                        (!fechaHasta.HasValue || p.Fecha <= fechaHasta.Value) &&
                                        (!idLocal.HasValue || p.Local.Id == idLocal.Value) &&
                                        (!idVisitante.HasValue || p.Visitante.Id == idVisitante.Value) &&
                                        ((sinEtapa.HasValue && ((sinEtapa.Value && !p.EtapaId.HasValue) || (!sinEtapa.Value && p.EtapaId.HasValue))) ||
                                         (!sinEtapa.HasValue && (!idEtapa.HasValue || p.EtapaId == null || p.EtapaId.Value == idEtapa.Value))
                                        )
                                       )
                                 select p).ToList<PartidoEntity>();

            return listaFiltrada;
        }

        internal void PersistirPartidoXEtapa(EtapaEntity entidad)
        {
            var dao = new PartidoDAO();
            var partidosEnEtapa = dao.SelectAll().Where(x => x.EtapaId.HasValue && (x.EtapaId.Value == entidad.Id));
            foreach (PartidoEntity pp in partidosEnEtapa)
            {
                pp.EtapaId = null;
                dao.Update(pp);
            }
            foreach (PartidoEntity pp in entidad.Partidos)
            {
                pp.EtapaId = entidad.Id;
                dao.Update(pp);
            }
        }
    }
}
